#ifndef __APP_SERIAL_H__
#define __APP_SERIAL_H__

#define _GNU_SOURCE
#include <termios.h>
#include "app_device.h"

typedef enum
{
    BR_9600 = B9600,
    BR_115200 = B115200
} Baudrate;

typedef enum
{
    STOP_1 = 0,      // 一位停止位
    STOP_2 = CSTOPB, // 两位停止位
} StopBits;

typedef enum
{
    PAR_NONE = 0,              // 无校验
    PAR_ODD = PARENB | PARODD, // 奇校验
    PAR_EVEN = PARENB,         // 偶校验
} Parity;

/**
 * @brief 初始化设备串口
 * @param device 设备
 * @return 0:成功，-1:失败
 */
int app_serial_init(Device_t *device);

/**
 * @brief 设置设备串口波特率
 * @param device 设备
 * @param baudrate 波特率
 * @return 0:成功，-1:失败
 */
int app_serial_setBaudRate(Device_t *device, Baudrate baudrate);


/**
 * @brief 设置设备串口校验位
 * @param device 设备
 * @param parity 校验位
 * @return 0:成功，-1:失败
 */
int app_serial_setParity(Device_t *device, Parity parity);

/**
 * @brief 设置设备串口停止位
 * @param device 设备
 * @param stopbits 停止位
 * @return 0:成功，-1:失败
 */
int app_serial_setStopBits(Device_t *device, StopBits stopbits);

/**
 * @brief 设置设备串口阻塞模式
 * @param device 设备
 * @param block 0:非阻塞，1:阻塞
 * @return 0:成功，-1:失败
 */
int app_serial_setBlock(Device_t *device, int block);

/**
 * @brief 设置串口设备为原始模式
 * @param device 设备
 * @return 0:成功，-1:失败
 */
int app_serial_setRaw(Device_t*device);

#endif /* __APP_SERIAL_H__ */
